use clap::{Parser, Subcommand};

#[derive(Debug, Parser)]
#[command(name = "ice", about = "SSD 与移动硬盘内容同步工具", long_about = None)]
pub struct Cli {
    #[command(subcommand)]
    pub(crate) command: Commands,
}

#[derive(Debug, Subcommand)]
pub enum Commands {
    /// 初始化配置文件
    Init {
        /// 强制覆盖已经存在的配置文件
        #[arg(long)]
        force : bool ,
    },
    /// 推送数据到外部存储（例如 机载SSD -> 外部移动硬盘）
    Push {
        /// 映射名称（可选，未提供则自动识别当前目录）
        name: Option<String>,
        /// 删除源文件夹
        #[arg(long)]
        delete_source: bool,
    },
    /// 从外部存储拉取数据（例如 外部移动硬盘 -> 机载SSD）
    Pull {
        /// 映射名称（必须提供）
        name: String,
    },
    /// 调用rsync工具
    Rsync{
        /// 映射名称（可选，未提供则自动识别当前目录）
        name: Option<String>,

        /// 同步方向，push 或 pull
        #[arg(long, default_value_t = String::from("push"))]
        direction: String,


        /// 删除源文件夹
        #[arg(long, default_value_t = false)]
        delete_source: bool,

        /// 不实际执行，只显示将要执行的 rsync 命令
        #[arg(long, default_value_t = false)]
        dry_run: bool,
    },
    /// 列出所有映射
    List,
    /// 后台监控
    Daemon {
        #[command(subcommand)]
        action : DaemonAction,
    },
    Remove {
        #[arg(required = true)] 
        name : String , 
    } ,

    Config {
        #[command(subcommand)] 
        action : ConfigAction ,
    } ,

    Add {
        /// 映射的名称
        name : String ,
    }
}

#[derive(Debug, Subcommand)]
pub enum DaemonAction {
    Start,
    Stop,
    Status,
    Run , // 内部使用
}

#[derive(Debug, Subcommand)]
pub enum ConfigAction {
    Show , 
    Edit ,
}